package search

import (
	"encoding/json"
	"os"
)

const dataFile = "data/data.json" //MARK 注意:路径是main那层开始;go的资源文件 和代码是平行放的

// Feed contains information we need to process a feed.
type Feed struct {
	Name string `json:"site"` //MARK 这里直接对上了json的key
	URI  string `json:"link"`
	Type string `json:"type"`
}

// RetrieveFeeds reads and unmarshals the feed data file. 做了: 把配置文件json读入到feeds切片
func RetrieveFeeds() ([]*Feed, error) {
	// Open the file.
	file, err := os.Open(dataFile)
	if err != nil {
		return nil, err
	}

	defer file.Close() //MARK 函数方法才执行(技术溢出) 相当于final

	// Decode the file into a slice of pointers
	// to Feed values.
	var feeds []*Feed //MARK feeds是切片(动态数组)
	err = json.NewDecoder(file).
		Decode(&feeds) //放到feed指针里面 MARK 这里Decode入参要求interface{} 就是什么都行; 这个类型一般配合反射使用

	// We don't need to check for errors, the caller can do this.
	return feeds, err //MARK 异常抛出,因为我不知道怎么办
}
